package main

import (
	"runtime"
	"sync"
	"time"
)

func main() {
	runtime.GOMAXPROCS(2)
	var pool = sync.Pool{
		New: func() interface{} {
			return 0
		},
	}
	go func() {
		pool.Put(1) // 放到私有对象里
		// pool.Put(2) // 放到共享池里
		// pool.Put(3) // 追加到共享池里
	}()
	time.Sleep(1 * time.Second)
	go func() {
		// 如果本地私有对象和共享池里都没有，从其他协程对应P的共享池中获取
		println(pool.Get().(int))
	}()
	time.Sleep(1 * time.Second)
}

// 如果设置CPU的数量为1，那么第二个协程返回1，因为Put和Get都是操作的同一个P
// 如果设置CPU的数量为2，那么第二个协程理论上有一半的几率和第一个协程绑定的不是一个P，因此有一半的几率返回2
